<?php
/**
 * Vision共通関数定義ファイル
 * 
 */

/**
 * SimpleXMLElement要素を追加する
 *
 * @param SimpleXMLElement $parent		親ノード
 * @param SimpleXMLElement $new_child	追加する子ノード
 */
function sxml_append(SimpleXMLElement $parent, SimpleXMLElement $new_child) {
	$node1 = dom_import_simplexml($parent);
	$dom_sxe = dom_import_simplexml($new_child);
	$node2 = $node1->ownerDocument->importNode($dom_sxe, true);
	return simplexml_import_dom($node1->appendChild($node2));
}

/**
 * SimpeXMLElement要素を置き換える
 *
 * @param SimpleXMLElement $parent		親ノード
 * @param SimpleXMLElement $new_child	新しい子ノード
 */
function sxml_replace(SimpleXMLElement $parent, SimpleXMLElement $new_child) {
	$node1 = dom_import_simplexml($parent);
	$dom_sxe = dom_import_simplexml($new_child);
	$node2 = $node1->ownerDocument->importNode($dom_sxe, true);
	return simplexml_import_dom($node1->parentNode->replaceChild($node2, $node1));
}

/**
 * コピー元の子要素のみを親ノードへコピーする
 *
 * @param SimpleXMLElement $parent		親ノード
 * @param SimpleXMLElement $src			コピー元のノード
 */
function sxml_copy_children(SimpleXMLElement $parent, SimpleXMLElement $src) {
	foreach ($src->children() as $childElem) {
		$copyElem = clone$childElem;
		sxml_append($parent, $copyElem);
	}
}

/**
 * 電子メールを送信する
 *
 * @param string $to			送信先メールアドレス
 * @param string $subject		メールタイトル
 * @param string $body			メール本文
 * @param string $from_email	送信元メールアドレス
 * @param string $from_name		送信者名
 * @return bool	 成功=true 失敗=false
 */
function sendmail_utf8($to, $subject, $body, $from_email, $from_name) {
	$from_name_mime = mb_encode_mimeheader($from_name, "UTF-8");
	$sendmail_param = "-f$from_email";
	$headers = "From: $from_name_mime <$from_email> \n";
	$headers .= "Replay-To: $from_name <$from_email> \n";
	$headers .= "Content-Type: text/plain; charset=utf-8 \n";
	return mb_send_mail($to, $subject, $body, $headers, $sendmail_param);
}

/**
 * URIから相対的パスを構成する
 * 
 * 引数が無い場合<br>
 * $srcURI = $_SERVER['REQUEST_URI'];<br>
 * $siteRoot = (string) Vision::$setting->document_root;<br>
 * $defaultFile = 'index.php';<br>
 * として処理される<br>
 * 
 * 注意：元となるURI文字列にクエリ文字列が付加していた場合でも切り捨ててしまいます
 *  
 * @param string $srcURI オプション 元となるURI文字列
 * @param string $siteRoot オプション サイトルートとする文字列
 * @param string $defaultFile オプション URIが"/"で終わる場合に付加するファイル名
 * @return string 相対的パス文字列
 */
function relative_uri() {
	$srcURI = $_SERVER['REQUEST_URI'];
	$siteRoot = (string) Vision::$setting->document_root;
	$defaultFile = 'index.php';
	switch (func_num_args()) {
		case 1:
			$srcURI = func_get_arg(0);
			break;
		case 2:
			$srcURI = func_get_arg(0);
			$siteRoot = func_get_arg(1);
			break;
		case 3:
			$srcURI = func_get_arg(0);
			$siteRoot = func_get_arg(1);
			$defaultFile = func_get_arg(2);
			break;
	}
	$retURI = preg_replace("/".preg_quote($siteRoot, "/~")."|\?.+$/", "", $srcURI);
	if (preg_match("/.*\..*$/", $retURI) == 0) {
		$retURI .= $defaultFile;
	}
	return $retURI;
}
